function InitFNTHAutocomplete( id , cls ) {
	o = $("#"+id );
	o.attr( "autocomplete" , "off" );
	o.data( "prevval" , o.val() );
	o.data( "id" , id );
	o.data( "class" , cls );
	o.data( "mouseovertooltip" , false );

	ul = $("<ul></ul>");
	ul.data( "parent" , o );
	ul.mouseover( function() {
			o = $(this).data("parent");
			o.data( "mouseovertooltip" , true );
		}
	);
	ul.mouseout( function() {
			o = $(this).data("parent");
			o.data( "mouseovertooltip" , false );
		}
	);
		
	ul.attr( "id" , id + "_items" );
	ul.addClass( "hitems" );
	o.data( "ul" , ul );

	$("#"+id+"_cont").append( ul );
	o.focus( function() { FNTHAutocompleteOnFocus( $(this) ); } );
	o.blur( function() { FNTHAutocompleteOnBlur( $(this) ); } );
	o.keyup( function() { FNTHAutocompleteOnKeyup( $(this) ); } );
}

function FNTHAutocompleteOnFocus( o ) {
}

function FNTHAutocompleteOnBlur( o ) {
	if (!o.data( "mouseovertooltip" ))
		FNTHAutocompleteShowTooltip( o , false );
}

function FNTHAutocompleteOnKeyup( o ) {
	if (o.data("prevval")!=o.val()) {
		FNTHAutocompleteGetDatas( o );
		o.data("prevval",o.val());
	}
}

function FNTHAutocompleteHourglass( o , b ) {
	if (b)
		o.addClass( "working" );
	else
		o.removeClass( "working" );
}

function FNTHAutocompleteGetDatas( o ) {
	FNTHAutocompleteHourglass( o , true );
	$.ajax(
		{
			type: "POST",
			cache: false,
			context: o,
			data: (
				{
					inajax : 1,
					ajaxobject : o.data( "id" ),
					ajaxevent : "get_datas",
					ac_filter : o.val()
				}
			),
			success: function(ret) {
				a = eval( ret );
				$(this).data( "datas" , a );
				FNTHAutocompleteRegenerateTooltip( o );
				FNTHAutocompleteHourglass( o , false );
			}
		}
	);
}

function FNTHAutocompleteOnClickItem( i ) {
	o = i.data( "parent" );
	n = i.data( "num" );
	d = o.data( "datas" ).items;
	o.val( d[n].value );
	FNTHAutocompleteShowTooltip( o , false );
	o.focus();
}

function FNTHAutocompleteShowTooltip( o , b ) {
	if (b) {
		o.data( "ul" ).removeClass( "hitems" );
	} else {
		o.data( "ul" ).addClass( "hitems" );
		o.data( "mouseovertooltip" , false );
	}
}

function FNTHAutocompleteRegenerateTooltip( o ) {
	ul = $("#" + o.data("id") + "_items" );
	o.data( "ul" , ul );
	ul.html( "" );
	ad = o.data( "datas" );
	d = ad.items;
	if (d.length) {
		for (i in d ) {
			li = $("<li></li>");
			li.data( "parent" , o );
			li.data( "num" , i );
			li.click( function() { FNTHAutocompleteOnClickItem( $(this) ); } );
			li.html( d[i].title );
			ul.append( li );
		}
		FNTHAutocompleteShowTooltip( o , true );
	} else {
		FNTHAutocompleteShowTooltip( o , false );
	}
}

